﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading; //引入命名空间

namespace CSharpThread
{
    /// <summary>
    /// 
    /// 一：多线程的学习
    /// Thread基础使用--》原理分析--》ThreadPool--》Task(主流)--》线程锁
    /// 
    /// 二：为什么学多线程
    /// 实现项目中多个任务的”并行执行“，更好的发挥多核心CPU的优势
    /// 多线程任务并行执行的本质：通过时间片切换，达到”并行“目的
    /// 
    /// 三：同步单线程和异步多线程比较
    /// 同步单线程：多任务无法同时执行，直接卡死
    /// 异步多线程：在一定程度上，能够提升系统的性能，改进用户体验，减少或避免卡顿
    /// 
    /// 四：多线程底层观察工具
    /// 
    /// 
    /// 
    /// 
    /// </summary>
    internal class Program
    {
        static void Main(string[] args)
        {
            Thread thread1 = new Thread(TStart); //基于委托（多态）传递具体方法

            Thread thread2 = new Thread(delegate ()  //使用匿名方法
            {
                Console.WriteLine("测试线程的资源占用情况！-2");
            });

            //以后我们学习都用这种方式
            Thread thread3 = new Thread(() =>  //使用Lambda表达式
            {
                Console.WriteLine("测试线程的资源占用情况! -3");
            });
            thread3.IsBackground = true; //设置背景线程
            thread3.Start();

            Console.WriteLine("这个是主线程的输出！");

            Console.ReadLine();
        }

        static void TStart()
        {
            Console.WriteLine("测试线程的资源占用情况！-1");
        }
    }
}
